import { resetRouter } from "@/router"; //导入重置路由模块
import { getToken, setToken, removeToken } from "@/utils/auth";
// 导入登录、获取用户信息接口函数
import { loginAPI, getUserProfileAPI, getUserInfoAPI } from "@/api/user";
const state = () => {
  return {
    // 用户令牌
    // 刷新页面的时候，从本地取token，借助逻辑或短路
    //逻辑或有值的话返回字符串，没值的话返回空值
    token: getToken() || "",
    // 用户信息
    userInfo: {},
  };
};
//给员工分配角色，然后给角色分配权限，
const mutations = {
  // 设置token
  setToken(state, token) {
    state.token = token;
    //本地存一份token
    setToken(token);
  },
  //设置用户信息
  setUserInfo: (state, userInfo) => {
    state.userInfo = userInfo;
  },
  //清空token
  removeToken: (state) => {
    state.token = "";
    //清除本地token
    removeToken();
  },
  //清除用户信息
  removeUserInfo: (state) => {
    state.userInfo = {};
  },
};

const actions = {
  // 登录action
  loginAction: async ({ commit }, loginForm) => {
    // 调接口、发起登录请求
    const resp = await loginAPI(loginForm);
    // console.log(resp.data)
    // 提交mutation
    commit("setToken", resp.data);
  },
  // 获取用户信息action
  getUserInfoAction: async ({ commit }) => {
    // 调2个接口发请求getUserProfileAPI，getUserInfoAPI
    // const resp = await getUserProfileAPI();
    // 通过 resp.data 获取用户基本资料
    // 解构：+重命名 获取用户基本资料
    const { data: userProfile } = await getUserProfileAPI();
    // 基于此次接口返回的userId继续发请第2次请求(获取用户头像等信息)
    const { data: userInfo } = await getUserInfoAPI(userProfile.userId);
    //合并成一个对象
    const userObj = { ...userProfile, ...userInfo }; //整成一个变量userObj
    // 提交mutation
    // { ...userProfile, ...userInfo }两个对象合并作为参数传给muation函数
    commit("setUserInfo", userObj);
    // 返回userObj
    return userObj;
  },
  // 退出登录action
  logoutAction: ({ commit }) => {
    commit("removeToken", "removeUserInfo");
    //重置路由实例（把路由表中的所有信息删除)
    resetRouter();
    //清空vuex中的路由
    // root: true 从全局下出发
    commit("route/removeRoutes", null, {
      // 从全局出发
      root: true,
    });
    //重置主题颜色
    commit("settings/resetTheme", null, {
      root: true,
    });
  },
};

export default {
  namespaced: true,
  state,
  mutations,
  actions,
};
